Deklaration von Funktionsbaustein-Instanzen oder Klassen-Instanzen in ST

Syntax
VAR (* optional_begin *) CONSTANT RETAIN NON_RETAIN PUBLIC|PROTECTED|PRIVATE|INTERNAL (* optional_end *)
| VAR_INPUT (* optional_begin *) RETAIN NON_RETAIN (* optional_end *)
| VAR_OUTPUT (* optional_begin *) RETAIN NON_RETAIN (* optional_end *)
| VAR_GLOBAL (* optional_begin *) CONSTANT RETAIN NON_RETAIN (* optional_end *) 
  FB_instance_1, FB_instance_2, ..., FB_instance_n : FB-type := ( input_1 := initial-value, input_2 := initial-value, ..., output_n := initial-value);
  FB_instance_A, FB_instance_B, ..., FB_instance_n: ARRAY [x..y] OF FB-type := [(input_1 := initial-value, input_2 := initial-value, ...), (input_1 := initial-value, input_2 := initial-value, ...), ...];
  FB_instance_C, FB_instance_D, ..., FB_instance_n: ARRAY [x1..y1, x2..y2, x3..y3] OF FB-type;  (* Initial values are also possible here. *)
(* Additional pieces of data, such as partial addresses, are also possible for the function block instances. *)
END_VAR
 
VAR_IN_OUT
  FB_instance_1, FB_instance_2, ..., FB_instance_n : FB-type;
  FB_instance_A, FB_instance_B, ..., FB_instance_n: ARRAY [x..y] OF FB-type;
  FB_instance_C, FB_instance_D, ..., FB_instance_n: ARRAY [x1..y1, x2..y2, x3..y3] OF FB-type;
END_VAR
 
VAR_EXTERNAL (* optional_begin *) CONSTANT (* optional_end *)
   name_1, name_2, ..., name_n : FB-type;
   name_5, name_6, ..., name_n : ARRAY [x..y] OF FB-type;
   name_7, name_8, ..., name_n : ARRAY [x1..y1, x2..y2, x3..y3] OF FB-type;
END_VAR

 

(* Note: If a class is used as type for the variable, it is actually a class instance. *)

Bedeutung

Deklaration einer bzw. mehrerer →Funktionsbaustein-Instanzen, wobei FB_instance_1, usw. →IEC-Bezeichner sein müssen. 
Analog dazu ist es möglich, Instanzen von →Klassen zu deklarieren. Die folgende Beschreibung trifft auf die Klasse (anstatt des Funktionsbausteins) zu, wenn der Kontext auf eine Klasse angewendet werden kann.

Die Deklaration mehrerer solcher Abschnitte ist zulässig. Die Deklaration ist innerhalb der Deklaration eines →Programms oder eines →Funktionsbausteins möglich.

Das optionale Schlüsselwort RETAIN oder NON_RETAIN markiert alle Elemente dieses Abschnitts als →gepuffert oder nicht-gepuffert. RETAIN oder NON_RETAIN sind innerhalb der Deklaration eines Programms und der Deklaration eines Funktionsbausteins zulässig. Falls Funktionsbaustein-Instanzen im aktuellen Abschnitt mit RETAIN oder NON_RETAIN deklariert sind, informieren Sie sich über das Verhalten deren Variablen bezüglich RETAIN und NON_RETAIN im FAQ-Artikel "Wie wird das Schlüsselwort "RETAIN" für Funktionsbaustein-Instanzen berücksichtigt?".

Mit dem optionalen Schlüsselwörter für die Sichtbarkeit definieren Sie die Sichtbarkeit aller Elemente dieses Abschnitts. Diese Schlüsselwörter sind nur innerhalb der Deklaration eines Funktionsbausteins zulässig.

Schlüsselwort

Bedeutung

PUBLIC

Öffentliche Verwendung: Die Variable kann überall dort verwendet werden, wo auch der Funktionsbaustein verwendet werden kann.

PROTECTED (oder keiner)

Geschützte Verwendung (Standard): Die Variable kann innerhalb des Funktionsbausteins verwendet werden, in der sie definiert ist. Zusätzlich kann sie in abgeleiteten Funktionsbausteinen verwendet werden.

Falls keine abgeleitete Funktionsbausteine vorhanden sind, hat PROTECTED die gleiche Bedeutung wie PRIVATE.

PRIVATE

Private Verwendung: Die Variable kann nur innerhalb des Funktionsbaustein verwendet werden, in der sie definiert ist.

INTERNAL

Interne Verwendung: Die Variable kann nur innerhalb des gleichen →Namespaces verwendet werden.

Abweichungen von IEC-Norm

Falls Sie es bevorzugen, dass in Neuron Power Engineer eine andere Sichbarkeit für Elemente ohne Schlüsselwort gilt, definieren Sie die Neuron Power Engineer-Konfigurationsvariable lc3.var.access.default und den Wert PUBLIC, PRIVATE oder INTERNAL. Dieser Wert gilt dann als neuer Standard. Beim Wert PROTECTED für die Konfigurationsvariable ist weiterhin der Standard PROTECTED gültig, wie dies laut der →IEC-Norm vorgegeben ist.
Für PUBLIC als Standard können Sie als Alternative auch die Neuron Power Engineer-Konfigurationsvariable lc3.var.access.default.public und Wert TRUE definieren. Die Konfigurationsvariable lc3.var.access.default.public hat den Vorrang vor lc3.var.access.default. Details zu den Konfigurationsvariablen finden Sie in der englischen Dokumentation "Administrator's Manual".
Konsequenz: →Lokale Variablen (= VAR) von →Funktionsbausteinen, bei denen kein Schlüsselwort für die Sichtbarkeit definiert ist, können laut der Norm nur innerhalb des Funktionsbausteins und in abgeleiteten Funktionsbausteinen verwendet werden. Allerdings ist es möglich, die Konfiguration zu ändern, um diese Variablen überall dort zu verwenden, wo auch der Funktionsbaustein verwendet werden kann.

Ein vorhandener →Funktionsbaustein (in →ST→FBS oder →KOP erstellt) ist als Typ für eine Funktionsbaustein-Instanz möglich.

Bei der Deklaration einer Funktionsbaustein-Instanz im Abschnitt VAR...END_VAR, VAR_INPUT...END_VAR oder VAR_OUTPUT...END_VAR können Sie die →Eingangsvariablen und →Ausgangsvariablen des Funktionsbausteins initialisieren. Der Initialisierungswert muss mit dem Datentyp der deklarierten Variable übereinstimmen oder ein Datentyp sein, der aufgrund der impliziten Konvertierung in diesen umgewandelt werden kann.
Bei der Deklaration einer globalen Funktionsbaustein-Instanz (d.h., im Abschnitt VAR_GLOBAL...END_VAR) ist es nicht möglich, das Attribute DMA zu verwenden (wie es für →globale Variablen möglich ist).
Bei der Deklaration einer Funktionsbaustein-Instanz im Abschnitt VAR_IN_OUT...END_VAR oder VAR_EXTERNAL...END_VAR ist es nicht möglich, einen Initialisierungswert anzugeben.

Sie können Funktionsbaustein-Instanzen auch mit Hilfe von ein- oder mehrdimensionalen ARRAYs deklarieren (auch dies ist analog zur "Deklaration eines ARRAY-Datentyps in ST") oder mit Hilfe von Strukturelementen deklarieren (siehe "Deklaration eines strukturierten Datentyps in ST").

Einschränkung und Hinweis zur Verwendung

  • Derzeit ist es zwar möglich, Funktionsbaustein-Instanzen im Abschnitt VAR_INPUT...END_VAR zu deklarieren.  Der Aufruf einer solchen Funktionsbaustein-Instanz ist jedoch nicht zulässig.

  • Derzeit ist es möglich, Funktionsbaustein-Instanzen mit Hilfe von ARRAYs in einer →Funktion zu deklarieren. Neuron empfiehlt Ihnen jedoch, solche Funktionsbaustein-Instanzen nicht in Funktionen zu deklarieren, da diese nicht →IEC-Norm-konform sind und möglicherweise in Neuron Power Engineer verboten werden.

  • Der Zugriff auf eine Funktionsbaustein-Instanz, die im Abschnitt VAR_GLOBAL...END_VAR eines ST-Objekts deklariert ist, erfolgt im Kontext von anderen Funktionsbausteinen über eine Funktionsbaustein-Instanz, die als →externe Variable im Abschnitt VAR_EXTERNAL...END_VAR deklariert ist.

  • Die Deklaration von globalen Funktionsbaustein-Instanzen ist auch in einem SPS-Objekt und/oder Global-Objekt möglich. Der Zugriff auf solche globale Funktionsbaustein-Instanzen erfolgt im Kontext von POE (PROGRAMFUNCTION_BLOCK) – ebenfalls über externe Variablen. (Info) Der Zugriff auf solche globale Funktionsbaustein-Instanzen im Kontext von Funktionen ist laut →IEC-Norm nicht erlaubt.

 

Gut zu wissen

(Graue Glühbirne) Neuron Power Engineer bietet außerdem die Möglichkeit, noch nicht festgelegte Speicherorte bei der Deklaration anzugeben. Siehe "Deklaration eines Sprachelements mit partieller Adresse in ST" für Details.

(Graue Glühbirne) Neuron Power Engineer bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar, JSON-String oder Typ für Variablen oder Datentypen angeben" für Details.

Beispiele
VAR
  Inst1, Inst2 : TOF; 
    (* declaring two instances of function block 'TOF' *)
  Inst3 : Control :=  (IN1 := 10, IN2 := 20, T1 := T#3ms);
    (* declaring one instance of function block 'Control' and initializing its inputs 'IN1', 'IN2' and 'T1' *)
  TONArr2 : ARRAY [0..2] OF TON := [(PT:=T#100ms), (PT:=T#50ms)];
    (* declaring 3 instances of TON block and initializing the input 'PT' of the first 2 instances *)
END_VAR
 
VAR_INPUT
  I_TON : TON; 
END_VAR
 
VAR_OUTPUT
  O_TON : TON; 
END_VAR
 
VAR_IN_OUT
  IO_TMR : TOF; 
END_VAR
Beispiel für die Deklaration einer Funktionsbaustein-Instanz inkl. Initialisierung, wobei ein Eingang der Funktionbaustein-Instanz mit Hilfe eines strukturierten Datentyps deklariert ist
PROGRAM Test
  VAR
    myFB : FB := (in1 := 1, c := (re := 1, im := 2));
  END_VAR
END_PROGRAM
 
FUNCTION_BLOCK FB
  VAR_INPUT
    in1 : int;
    c : complex;
  END_VAR
END_FUNCTION_BLOCK
 
TYPE
  complex : STRUCT
    re : REAL;
    im : REAL;
  END_STRUCT;
END_TYPE